package br.com.projeto.actions;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;

import br.com.projeto.bean.ProjetoBean;
import br.com.projeto.entity.AnuncioVO;
import br.com.projeto.entity.CarroVO;
import br.com.projeto.entity.ImagemVO;
import br.com.projeto.entity.PagamentoVO;
import br.com.projeto.entity.UsuarioVO;

import com.opensymphony.xwork2.ActionSupport;

public class AnuncioInternoAction extends ActionSupport implements SessionAware,ServletRequestAware,ServletResponseAware{

	private String mensagem;
	private AnuncioVO anuncioVO;
	private List<AnuncioVO> anuncios;
	private List<ImagemVO> imagens;
	private Map<String, Object> session;
	private ImagemVO imagemVO;
	private HttpServletRequest request;
	private HttpServletResponse response;
	private File[] images;
	private String status;
	
	public String execute() throws Exception {
		inicializar();
		anuncioVO.setUsuarioVO(((UsuarioVO) session.get("usuarioVO")));
		anuncios = ProjetoBean.listarAnuncio(anuncioVO,status);
		return "principal";
	}
	//Buscar anuncios do usuario
	public String buscar(){
		anuncioVO.setUsuarioVO(((UsuarioVO) session.get("usuarioVO")));
		anuncios = ProjetoBean.listarAnuncio(anuncioVO,status);
		return "principal";
	}
	
	//Cadastro do anuncio feito pelo usuario
	public String cadastrarAnuncio() throws Exception{
		if(anuncioVO != null){
			anuncioVO.setUsuarioVO(((UsuarioVO) session.get("usuarioVO")));
			anuncioVO.setImagens(new ArrayList<ImagemVO>());
			if(images != null){
				for (File image: images) {
					FileInputStream fis = new FileInputStream(image);   
					int size = (int)image.length();
					byte[] bytes = new byte [size];   
					fis.read(bytes, 0, size);
					ImagemVO imagemVO = new ImagemVO();
					imagemVO.setImagem(bytes);  
					anuncioVO.getImagens().add(imagemVO);
		        }
			}
			ProjetoBean.inserirAnuncio(anuncioVO);
			return "iniciar";
		}else{
			inicializar();
			return "cadastrar";
		}
	}
	
	public void getMetodoImage() throws Exception{
		request = ServletActionContext.getRequest(); 
		response = ServletActionContext.getResponse();
		inicializar();
		
		imagemVO.setSeqImagem(Integer.valueOf(request.getParameter("seqImagem")));
		imagemVO.setSeqAnuncio(Integer.valueOf(request.getParameter("seqAnuncio")));
		imagemVO = ProjetoBean.buscarImagem(imagemVO);
		
		int size = imagemVO.getImagem().length;
		response.setContentType("image/jpeg");
		response.getOutputStream().flush();
		response.getOutputStream().write(imagemVO.getImagem(),0,size);
		response.getOutputStream().close();
		
	}
	
	public String getAnuncio() throws Exception{
		if(request.getParameter("seqAnuncio") != null){
			anuncioVO = new AnuncioVO();
			anuncioVO.setSeqAnuncio(Integer.valueOf(request.getParameter("seqAnuncio")));
		}
		anuncioVO = ProjetoBean.buscarAnuncio(anuncioVO);
		return "alterar";
	}

	public String excluirAnuncio() throws Exception{
		if(request.getParameter("seqAnuncio") != null){
			anuncioVO = new AnuncioVO();
			anuncioVO.setSeqAnuncio(Integer.valueOf(request.getParameter("seqAnuncio")));
			ProjetoBean.deletarAnuncio(anuncioVO);
		}
		return execute();
	}
	
	public String excluirImagem() throws Exception{
		if(request.getParameter("seqImagem") != null){
			imagemVO = new ImagemVO();
			imagemVO.setSeqImagem(Integer.valueOf(request.getParameter("seqImagem")));
			ProjetoBean.deletarImagem(imagemVO);
			anuncioVO = new AnuncioVO();
			anuncioVO.setSeqAnuncio(Integer.valueOf(request.getParameter("seqAnuncio")));
			anuncioVO = ProjetoBean.buscarAnuncio(anuncioVO);
		}
		return "alterar";
	}
	public String alterarAnuncio() throws Exception{
		anuncioVO.setUsuarioVO(((UsuarioVO) session.get("usuarioVO")));
		anuncioVO.setImagens(new ArrayList<ImagemVO>());
		if(images != null){
			for (File image: images) {
				FileInputStream fis = new FileInputStream(image);   
				int size = (int)image.length();
				byte[] bytes = new byte [size];   
				fis.read(bytes, 0, size);
				ImagemVO imagemVO = new ImagemVO();
				imagemVO.setImagem(bytes);  
				anuncioVO.getImagens().add(imagemVO);
	        }
		}
		ProjetoBean.alterarAnuncio(anuncioVO);
		return "iniciar";
	}
	
	private void inicializar(){
		imagemVO = new ImagemVO();
		anuncioVO = new AnuncioVO();
		anuncioVO.setImagens(new ArrayList<ImagemVO>());
		anuncioVO.setCarroVO(new CarroVO());
		anuncioVO.setPagamentoVO(new PagamentoVO());
		anuncioVO.getPagamentoVO().setTipoPagamento("BOLETO");
	}
	/**
	 * @return o anuncioVO
	 */
	public AnuncioVO getAnuncioVO() {
		return anuncioVO;
	}

	/**
	 * @param anuncioVO o anuncioVO a ser configurado
	 */
	public void setAnuncioVO(AnuncioVO anuncioVO) {
		this.anuncioVO = anuncioVO;
	}

	/**
	 * @return o anuncios
	 */
	public List<AnuncioVO> getAnuncios() {
		return anuncios;
	}

	/**
	 * @param anuncios o anuncios a ser configurado
	 */
	public void setAnuncios(List<AnuncioVO> anuncios) {
		this.anuncios = anuncios;
	}

	/**
	 * @return o session
	 */
	public Map<String, Object> getSession() {
		return session;
	}
	
	public void setSession(Map<String, Object> session) {
		this.session = session;
	}

	/**
	 * @return o mensagem
	 */
	public String getMensagem() {
		return mensagem;
	}

	/**
	 * @param mensagem o mensagem a ser configurado
	 */
	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}
	/**
	 * @return o imagemVO
	 */
	public ImagemVO getImagemVO() {
		return imagemVO;
	}
	/**
	 * @param imagemVO o imagemVO a ser configurado
	 */
	public void setImagemVO(ImagemVO imagemVO) {
		this.imagemVO = imagemVO;
	}
	
	/**
	 * @return o imagens
	 */
	public List<ImagemVO> getImagens() {
		return imagens;
	}
	/**
	 * @param imagens o imagens a ser configurado
	 */
	public void setImagens(List<ImagemVO> imagens) {
		this.imagens = imagens;
	}
	/**
	 * @return o request
	 */
	public HttpServletRequest getRequest() {
		return request;
	}
	/**
	 * @return o response
	 */
	public HttpServletResponse getResponse() {
		return response;
	}
	
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
	
	public void setServletResponse(HttpServletResponse response) {
		this.response = response;
		
	}
	/**
	 * @return o images
	 */
	public File[] getImages() {
		return images;
	}
	/**
	 * @param images o images a ser configurado
	 */
	public void setImages(File[] images) {
		this.images = images;
	}
	/**
	 * @return o status
	 */
	public String getStatus() {
		return status;
	}
	/**
	 * @param status o status a ser configurado
	 */
	public void setStatus(String status) {
		this.status = status;
	}
}
